package com.zhoux.api.io.io;

import java.io.*;

/**
 * @author taoyi
 * @version 1.0
 * @date 2021/3/26 14:17
 *
 * 本类用于测试缓冲流
 *
 * java 将流分为两类, 节点流和处理流
 * 节点流: 也称低级流, 特点: 流的另一端是明确的, 通过它我们知道数据从哪里来或写到哪里去.
 *        低级流也是真实负责搬运数据的流, 读写一定是建立在它的基础上进行的.
 * 处理流: 也称高级流, 特点: 不能独立存在, 必须连接在其他流上, 目的是当数据 "流经"该流时对数据进行加工处理,
 *        简化我们的操作.
 * 实际开发时, 我们经常串联一组高级流到一个低级流上, 在读写数据的过程中对数据进行流水式加工处理, 这个过程也称为 "流的连接",
 *        这就是 IO 的精髓所在.
 *
 *  缓冲流:
 *  java.io.BufferedInputStream 和 java.io.BufferedOutputStream
 *  缓冲流是一对高级流, 作用是提高读写数据的效率
 *  缓冲流内部有一个字节数组, 默认长度 8*1024K, 缓冲流读写数据时一定是将数据的读写方式转换为块读写来保证读写效率.
 *
 */
public class CopyDemo {
    public static void main(String[] args) {
        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;

        try {
            bis = new BufferedInputStream(new FileInputStream(".\\src\\main\\java\\com\\zhoux\\file\\11.gif"));
            bos = new BufferedOutputStream(new FileOutputStream(".\\src\\main\\java\\com\\zhoux\\file\\11_copy.gif"));

            int b;
            long start = System.currentTimeMillis();
            while ((b=bis.read())==-1){
                bos.write(b);
            }
            long end = System.currentTimeMillis();
            System.out.println("耗时"+(end-start)+"ms");
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                bos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                bis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
}
